#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int argc, char const *argv[])
{
	// 创建子进程
	pid_t son = fork();
	if(son > 0) // 父进程
	{
		printf("我是父进程pid=%d\n", getpid());
		int status;
		wait(&status);
		// 判断子进程是否为正常退出
		if(WIFEXITED(status))
		{
			printf("子进程正常退出，退出值=%d\n", WEXITSTATUS(status));
		} // 父进程获取的退出值，不是子进程中调用的exit(17),而是exec执行的1进程返回的19
	}
	else if(son == 0) // 子进程
	{
		printf("我是子进程pid=%d\n", getpid());
		printf("子进程的父进程pid=%d\n", getppid());
		int ret = execl("/mnt/hgfs/WH2404/01系统编程/day05/1", "1", NULL);
		if(ret == -1)
		{
			perror("执行失败\n");
			return -1;
		}
		// 执行成功时，没有返回，后面的代码不执行
		printf("ret=%d\n", ret);
		printf("子进程执行完毕\n");
		exit(17);
	}
	
	return 0;
}
